package com.多线程基础.锁的常用情况.基础synchronized锁;

public class MyThread extends Thread{
    static int ticket=0;
    //静态公用

    static Object object=new Object();
    //锁对象，一定要是唯一的，或者说是共享的，静态


    @Override
    public void run() {

        while (true){

            synchronized (object){
                //1.所代码不能写循环的外面 2.必须唯一静态object
                //将操作共享数据的代码锁起来,不管有多少线程都是轮流，一个完了才能另一个
                //需要一个随机的锁对象，随机到object也可以，但是必须唯一

                if(ticket<100){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        //父类没有抛异常，所以子类稚只能try不可以抛出
                        throw new RuntimeException(e);
                    }

                    ticket++;
                    System.out.println(getName()+"正在买"+ticket+"张");
                }else {
                    break;
                }


            }

        }
    }
}
